<?php

// 应用公共文件

//获得guid
if (!function_exists('getGuid')) {
    function getGuid()
    {
        $guid = md5(time() . config('MD5_KEY') . getRndString(6));
        return $guid;
    }
}

//随机字符串

if (!function_exists('getRndString')) {
    function getRndString($length)
    {
        $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';
        $key = '';
        for ($i = 0; $i < $length; $i++) {
            @$key .= $pattern[mt_rand(0, 35)];
        }
        return $key;
    }
}
//随机数字

if (!function_exists('getRndNumber')) {
    function getRndNumber($length)
    {
        $pattern = '1234567890';
        $key = '';
        for ($i = 0; $i < $length; $i++) {
            @$key .= $pattern{
            mt_rand(0, 9)};
        }
        return $key;
    }
}
/**
 * 根据身份证号码获取用户年龄
 */
if (!function_exists('getUserAgeByIdCard')) {
    function getUserAgeByIdCard($id)
    {
        //过了这年的生日才算多了1周岁
        if (empty($id)) {
            return '';
        }
        $date = strtotime(substr($id, 6, 8));
        //获得出生年月日的时间戳
        $today = strtotime('today');
        //获得今日的时间戳 111cn.net
        $diff = floor(($today - $date) / 86400 / 365);
        //得到两个日期相差的大体年数

        //strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比
        $age = strtotime(substr($id, 6, 8) . ' +' . $diff . 'years') > $today ? ($diff + 1) : $diff;
        return $age;
    }
}

/**
 * 根据身份证号码获取用户年龄
 */
if (!function_exists('getUserBirthdayByIdCard')) {
    function getUserBirthdayByIdCard($id)
    {
        //过了这年的生日才算多了1周岁
        if (empty($id)) {
            return '';
        }
        $date = strtotime(substr($id, 6, 8));
        return date('Y-m-d', $date);
    }
}


/**
 * 验证电话号码的正确性
 */
if (!function_exists('verifyTel')) {
    function verifyTel($tel)
    {
        if (!is_numeric($tel)) {
            return false;
        }
        $search = '/^(1([3456789][0-9]{9}))$/';
        if (preg_match($search, $tel)) {
            return true;
        } else {
            return false;
        }
    }
}

/**
 * 根据身份证号码获取用户性别
 */
if (!function_exists('getUserSexByIdCard')) {
    function getUserSexByIdCard($idcard)
    {
        if (empty($idcard)) {
            return null;
        }
        $sexint = (int) substr($idcard, 16, 1);

        //return $sexint % 2 === 0 ? '女' : '男';
        return $sexint % 2 === 0 ? '2' : '1';
    }
}

//判断isbn号的正确性
#1.如果为10位，第一位必须为'7',
#2.如果为13位，前4位必须为'9787'或者'9797'
#3.除最后一位外，其余必须是纯数字
if (!function_exists('checkIsbn')) {
    function checkIsbn($isbn)
    {
        $isbn_num = substr($isbn, 0, -1);
        if (!is_numeric($isbn_num)) {
            return false;
        }
        if (strlen($isbn) == '10') {
            if (substr($isbn, 0, 1) != '7') {
                return false;
            }
        } elseif (strlen($isbn) == '13') {
            $isbns = substr($isbn, 0, 4);
            if ($isbns !== '9787' && $isbns !== '9797') {
                return false;
            }
        } else {
            return false;
        }
        return true;
    }
}

/**
 * 判断索书号规则
 */
if (!function_exists('checkCallno')) {
    function checkCallno($callno)
    {
        $data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Z'];
        $callno = substr($callno, 0, 1);
        if (!in_array($callno, $data)) {
            return false;
        }
        return true;
    }
}

//是否包含空格
if (!function_exists('isBlank')) {
    function isBlank($str)
    {
        if (preg_match("/ /", $str)) {
            return true; //包含空格
        }
        return false;
    }
}
//是否有中文
if (!function_exists('isChinese')) {
    function isChinese($data)
    {
        if (preg_match("/[\x7f-\xff]/", $data)) {
            return true; //包含中文
        }
        return false;
    }
}
//是否包含特殊字符
if (!function_exists('isSpecial')) {
    function isSpecial($str)
    {
        if (preg_match('/^[ _:：,，.。…\/、~`＠＃￥％＆×＋｜｛｝＝－＊＾＄～｀!@#$%^&*()—=（）！￥{}【】\[\]\|\"\'’‘“”；;《》<>\?\？\·]$/u', $str)) {
            return true; //包含空特殊字符
        }
        return false;
    }
}

/**
 * 判断是否为合法的身份证号码
 * @param $mobile
 * @return int
 */
if (!function_exists('isCreditNo')) {
    function isCreditNo($vStr)
    {
        $vCity = array(
            '11',
            '12',
            '13',
            '14',
            '15',
            '21',
            '22',
            '23',
            '31',
            '32',
            '33',
            '34',
            '35',
            '36',
            '37',
            '41',
            '42',
            '43',
            '44',
            '45',
            '46',
            '50',
            '51',
            '52',
            '53',
            '54',
            '61',
            '62',
            '63',
            '64',
            '65',
            '71',
            '81',
            '82',
            '91'
        );
        if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) {
            return false;
        }
        if (!in_array(substr($vStr, 0, 2), $vCity)) {
            return false;
        }
        $vStr = preg_replace('/[xX]$/i', 'a', $vStr);
        $vLength = strlen($vStr);
        if ($vLength == 18) {
            $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);
        } else {
            $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);
        }
        if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) {
            return false;
        }
        if ($vLength == 18) {
            $vSum = 0;
            for ($i = 17; $i >= 0; $i--) {
                $vSubStr = substr($vStr, 17 - $i, 1);
                $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr, 11));
            }
            if ($vSum % 11 != 1) {
                return false;
            }
        }
        return true;
    }
}


//计算两个时间的差值
if (!function_exists('timediff')) {
    function timediff($begin_time, $end_time)
    {
        if ($begin_time < $end_time) {
            $starttime = $begin_time;
            $endtime = $end_time;
        } else {
            $starttime = $end_time;
            $endtime = $begin_time;
        }
        $timediff = $endtime - $starttime;
        $days = intval($timediff / 86400);
        $remain = $timediff % 86400;
        $hours = intval($remain / 3600);
        $remain = $remain % 3600;
        $mins = intval($remain / 60);
        $secs = $remain % 60;
        $res = array("day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs);
        return $res;
    }
}


//计算两个时间的天数
if (!function_exists('timediffDay')) {
    function timediffDay($begin_time, $end_time)
    {
        if ($begin_time < $end_time) {
            $starttime = $begin_time;
            $endtime = $end_time;
        } else {
            $starttime = $end_time;
            $endtime = $begin_time;
        }
        $timediff = $endtime - $starttime;
        $days = intval($timediff / 86400);
        return $days + 1;
    }
}

//根据图片链接获取图片名
if (!function_exists('getImgNameByUrl')) {
    function getImgNameByUrl($url)
    {
        if (empty($url)) return false;
        $img_arr = explode('/', $url);
        $img_name_arr = explode('.', end($img_arr));
        return $img_name_arr[0];
    }
}


//是否包含空格
if (!function_exists('isBlank')) {
    function isBlank($str)
    {
        if (preg_match("/ /", $str)) {
            return true; //包含空格
        }
        return false;
    }
}
//是否有中文
if (!function_exists('isChinese')) {
    function isChinese($data)
    {
        if (preg_match("/[\x7f-\xff]/", $data)) {
            return true; //包含中文
        }
        return false;
    }
}
//是否包含特殊字符
if (!function_exists('isSpecial')) {
    function isSpecial($str)
    {
        if (preg_match('/^[ _:：,，.。…\/、~`＠＃￥％＆×＋｜｛｝＝－＊＾＄～｀!@#$%^&*()—=（）！￥{}【】\[\]\|\"\'’‘“”；;《》<>\?\？\·]$/u', $str)) {
            return true; //包含空特殊字符
        }
        return false;
    }
}

/**
 * 验证管理员账号  （如果框架验证器内部有验证，推荐用框架内部验证器）
 * 1.只能是字母或数字，不能有其他字符
 * 2.账号长度5-20位的字符串/**
 */
if (!function_exists('validate_account')) {
    function validate_account($account)
    {
        if (strlen($account) > 20 || strlen($account) < 5) {
            return "账号必须为5-20位的字符串";
        }
        if (!preg_match("/^[a-z\d]*$/i", $account)) {
            return "账号只能包含数字和字母"; //有数字有字母 ";
        }
        return true;
    }
}


/**
 * 验证管理员密码
 * 1. 不能全部是数字
 * 2. 不能全部是字母
 * 3. 必须是数字和字母组合
 * 4. 不包含特殊字符
 * 5. 密码长度6-20位的字符串/**
 * return 返回：$msg
 */

if (!function_exists('validate_password')) {
    function validate_password($pwd)
    {
        if (strlen($pwd) > 20 || strlen($pwd) < 6) {
            return "密码必须为6-20位的字符串";
        }

        if (preg_match("/^\d*$/", $pwd)) {
            return "密码必须包含字母"; //全数字
        }

        if (preg_match("/^[a-z]*$/i", $pwd)) {
            return "密码必须包含数字"; //全字母
        }

        if (!preg_match("/^[a-z\d]*$/i", $pwd)) {
            return "密码只能包含数字和字母"; //有数字有字母 ";
        }
        return true;
    }
}
